<?php

class AESH5Mcrypt
{
    private $key = 'h5uidjiruanoscom';

    /**
     * 加密
     * @param String input 加密的字符串
     * @param String key   解密的key
     * @return HexString
     */
    public function encrypt($input = '')
    {
        //AES, 128 ECB模式加密数据
        $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);
        $input = $this->pkcs5_pad($input, $size);
        $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');
        $iv = mcrypt_create_iv(mcrypt_enc_get_iv_size($td), MCRYPT_RAND);
        mcrypt_generic_init($td, $this->key, $iv);

        $data = mcrypt_generic($td, $input);
        mcrypt_generic_deinit($td);
        mcrypt_module_close($td);
        $data = base64_encode($data);

        return $data;

    }

    /**
     * 填充方式 pkcs5
     * @param String text       原始字符串
     * @param String blocksize  加密长度
     * @return String
     */
    private function pkcs5_pad($text, $blocksize)
    {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }

    /**
     * 解密
     * @param String input 解密的字符串
     * @param String key   解密的key
     * @return String
     */
    public function decrypt($sStr)
    {
        //AES, 128 ECB模式加密数据
        $decrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $this->key, base64_decode($sStr), MCRYPT_MODE_ECB);
        $dec_s = strlen($decrypted);
        $padding = ord($decrypted[$dec_s - 1]);
        $decrypted = substr($decrypted, 0, -$padding);

        return $decrypted;
    }

    /**
     * openssl加密
     * @param $key
     * @param $payload
     * @return string
     * author:dengjing
     * date:2020/11/30 5:58 下午
     */
    function opensslEncrypt($payload, $key)
    {
        //openssl_cipher_iv_length — 获取密码iv长度
        //openssl_random_pseudo_bytes — 生成一个伪随机字节串
        //$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
        $iv = substr(md5(uniqid(rand(),1)),   8,   16);
        $encrypted = openssl_encrypt($payload, 'aes-256-cbc',$key, 0,$iv);
        //$iv = base64_encode($iv);
        return base64_encode($encrypted.'::'.$iv);
    }

    /**
     * openssl解密
     * @param $key
     * @param $garble
     * @return false|string
     * author:dengjing
     * date:2020/11/30 5:58 下午
     */
    function opensslDecrypt($garble,$key)
    {
        list($encrypted_data, $iv) = explode('::', base64_decode($garble,true), 2);
        return openssl_decrypt($encrypted_data, 'aes-256-cbc', $key, 0, $iv);
    }
}